/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.edu.nju.software.greencreditsystem.service;

import cn.edu.nju.software.greencreditsystem.DAO.EnvironmentWarningDAO;
import cn.edu.nju.software.greencreditsystem.DAO.FinancialWarningDAO;
import cn.edu.nju.software.greencreditsystem.DAO.WarningTemplateDAO;
import cn.edu.nju.software.greencreditsystem.DTO.OutputWarningDTO;
import cn.edu.nju.software.greencreditsystem.domain.EnvironmentStandardValue;
import cn.edu.nju.software.greencreditsystem.domain.EnvironmentWarning;
import cn.edu.nju.software.greencreditsystem.domain.EnvironmentWarningType;
import cn.edu.nju.software.greencreditsystem.domain.FinancialStandardValue;
import cn.edu.nju.software.greencreditsystem.domain.FinancialWarning;
import cn.edu.nju.software.greencreditsystem.domain.FinancialWarningType;
import cn.edu.nju.software.greencreditsystem.domain.WarningTemplate;
import cn.edu.nju.software.greencreditsystem.factory.DAOFactory;
import java.util.List;

/**
 * 作者：韩天
 * 创建时间：2011-8-22
 * 类描述：警告模块相关的service封装类
 */
public class WarningService {
    /**
     * 方法描述：取得未读财务警告的条数
     * param：
     * return：
     */
    public int get_UnreadedFinancialCount(int enterpriseID){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        return fwDAO.getEnterpriseUnread(enterpriseID).size();
    }
    
    /**
     * 方法描述：取得未读环境警告的条数
     * param：
     * return：
     */
    public int get_UnreadedEnvironmentCount(int enterpriseID){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        return ewDAO.getEnterpriseUnread(enterpriseID).size();
    }
    
    /**
     * 方法描述：取得银行未读财务警告的条数
     * param：
     * return：
     */
    public int get_BankUnreadedFinancialCount(int enterpriseID){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        return fwDAO.getBankUnread(enterpriseID).size();
    }
    
    /**
     * 方法描述：取得银行未读环境警告的条数
     * param：
     * return：
     */
    public int get_BankUnreadedEnvironmentCount(int enterpriseID){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        return ewDAO.getBankUnread(enterpriseID).size();
    }
    
    /**
     * 方法描述：取得所有财务警告
     * param：
     * return：
     */
    public List<FinancialWarning> get_AllFinancial(int enterpriseID){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        return fwDAO.getByEnterprise(enterpriseID);
    }
    
    /**
     * 方法描述：取得所有环境警告
     * param：
     * return：
     */
    public List<EnvironmentWarning> get_AllEnvironment(int enterpriseID){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        return ewDAO.getByEnterprise(enterpriseID);
    }
    
    /**
     * 方法描述：取得所有未读财务警告
     * param：
     * return：
     */
    public List<FinancialWarning> getUnreadedFinancial(int enterpriseID){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        return fwDAO.getEnterpriseUnread(enterpriseID);
    }
    
    /**
     * 方法描述：取得所有未读环境警告
     * param：
     * return：
     */
    public List<EnvironmentWarning> getUnreadedEnvironment(int enterpriseID){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        return ewDAO.getEnterpriseUnread(enterpriseID);
    }
    
    /**
     * 方法描述：取得银行所有未读财务警告
     * param：
     * return：
     */
    public List<FinancialWarning> getBankUnreadedFinancial(int enterpriseID){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        return fwDAO.getBankUnread(enterpriseID);
    }
    
    /**
     * 方法描述：取得银行所有未读环境警告
     * param：
     * return：
     */
    public List<EnvironmentWarning> getBankUnreadedEnvironment(int enterpriseID){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        return ewDAO.getBankUnread(enterpriseID);
    }
    
    /**
     * 方法描述：取得一条财务警告
     * param：
     * return：
     */
    public OutputWarningDTO getFinancialWarning(int warningID, boolean isEnterprise){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        FinancialWarning warning = fwDAO.getById(warningID);
        OutputWarningDTO warningDTO = new OutputWarningDTO();
        //设置警告开头
        warningDTO.setHeader(warning.getEnterprise().getName()+":");
        //设置警告主体
        FinancialWarningType fwt = warning.getType();
        FinancialStandardValue fsv = DAOFactory.getFinancialStandardValueDAOInstance().getStandardValueObjects(fwt.getFactor().getId());
        String warningContent = "贵公司" + (warning.getDate().getYear()+1900) + "年" 
                        + (warning.getDate().getMonth()+1) + "月的" + fwt.getFactor().getName();
        if(fwt.getType() == FinancialWarningType.STANDARD && fsv.getLargeBetter())
            warningContent += "小于标准值";
        else if(fwt.getType() == FinancialWarningType.STANDARD && !fsv.getLargeBetter())
            warningContent += "大于标准值";
        else
            warningContent += "变动过快";
        
        warningDTO.setBody(warningContent + "," +warning.getWarningTemplate().getContent());
        //设置警告结尾
        warningDTO.setTail(warning.getDate().toString());
        //设置警告为已读
        if(isEnterprise){
            warning.setEnterpriseReaded(true);
        }else{
            warning.setBankReaded(true);
        }
        fwDAO.update(warning);
        return warningDTO;
    }
    
    /**
     * 方法描述：取得一条环境警告
     * param：
     * return：
     */
    public OutputWarningDTO getEnvironmentWarning(int warningID, boolean isEnterprise){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        EnvironmentWarning warning = ewDAO.getById(warningID);
        OutputWarningDTO warningDTO = new OutputWarningDTO();
        //设置警告开头
        warningDTO.setHeader(warning.getEnterprise().getName()+":");
        //设置警告主体
        EnvironmentWarningType ewt = warning.getType();
        EnvironmentStandardValue esv = DAOFactory.getEnvironmentStandardValueDAOInstance().get(warning.getEnterprise().getId(), ewt.getFactor().getId());
        String warningContent = "贵公司" + (warning.getDate().getYear()+1900) + "年" 
                        + (warning.getDate().getMonth()+1) + "月的" + ewt.getFactor().getName();
        if(ewt.getType() == EnvironmentWarningType.STANDARD && esv.getType() == 0)
            warningContent += "小于标准值";
        else if(ewt.getType() == EnvironmentWarningType.STANDARD && esv.getType() == -1)
            warningContent += "大于标准值";
        else if(ewt.getType() == EnvironmentWarningType.STANDARD)
            warningContent += "与标准值差距过大";
        else
            warningContent += "变动过快";
        warningDTO.setBody(warningContent + "," + warning.getWarningTemplate().getContent());
        //设置警告结尾
        warningDTO.setTail(warning.getDate().toString());
        if(isEnterprise){
            warning.setEnterpriseReaded(true);
        }else{
            warning.setBankReaded(true);
        }
        ewDAO.update(warning);
        return warningDTO;
    }
    
    /**
     * 方法描述：取得所有警告模板
     * param：
     * return：
     */
    public List<WarningTemplate> get_AllTemplate(){
        WarningTemplateDAO wDAO = DAOFactory.getWarningTemplateDAOInstance();
        return wDAO.getAll();
    }
    
    /**
     * 方法描述：取得几条最新财务警告
     * param：
     * return：
     */
    public List<FinancialWarning> get_TwoFinancialWarning(){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        List<FinancialWarning> list = fwDAO.getBankUnread();
        if(list.size() > 3){
            return list.subList(0, 4);
        }else{
            return list;
        }
    }
    
    /**
     * 方法描述：取得几条最新环境警告
     * param：
     * return：
     */
    public List<EnvironmentWarning> get_TwoEnvironmentWarning(){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        List<EnvironmentWarning> list = ewDAO.getBankUnread();
        if(list.size() > 3){
            return list.subList(0, 4);
        }else{
            return list;
        }
    } 
    
    /**
     * 方法描述：根据企业id取得两条最新财务警告
     * param：
     * return：
     */
    public List<FinancialWarning> get_TwoFinancialWarning(int enterpriseId){
        FinancialWarningDAO fwDAO = DAOFactory.getFinancialWarningDAOInstance();
        List<FinancialWarning> list = fwDAO.getEnterpriseUnread(enterpriseId);
        if(list.size() > 1){
            return list.subList(0, 2);
        }else{
            return list;
        }
    }
    
    /**
     * 方法描述：根据企业id取得两条最新环境警告
     * param：
     * return：
     */
    public List<EnvironmentWarning> get_TwoEnvironmentWarning(int enterpriseId){
        EnvironmentWarningDAO ewDAO = DAOFactory.getEnvironmentWarningDAOInstance();
        List<EnvironmentWarning> list = ewDAO.getEnterpriseUnread(enterpriseId);
        if(list.size() > 1){
            return list.subList(0, 2);
        }else{
            return list;
        }
    } 
}
